/**   
 * @Title: UploadController.java 
 * @Package com.dragon.learn.web.controller 
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author dragon   
 * @date 2018年8月22日 下午3:10:07 
 * @version V1.0   
 */
package com.dragon.learn.web.controller;

import com.dragon.learn.web.vo.MyVO;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @ClassName: UploadController
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author dragon
 * @date 2018年8月22日 下午3:10:07
 * 
 */

@Controller
public class UploadController {

	@RequestMapping("upload")
	public @ResponseBody String upload(MultipartFile file, MyVO vo) {

		try {
			FileUtils.writeByteArrayToFile(new File("e:/temp/test/upload/" + file.getOriginalFilename()),file.getBytes());

			return "true";
		} catch (IOException e) {

			e.printStackTrace();
			return "false";
		}

	}

	@RequestMapping("uploads")
	public String uploads(@RequestParam("files") MultipartFile[] files, MyVO vo) {
		String path = "e:/temp/test/upload/";
		// 判断file数组不能为空并且长度大于0
		if (files != null && files.length > 0) {
			// 循环获取file数组中得文件
			for (int i = 0; i < files.length; i++) {
				MultipartFile file = files[i];
				// 保存文件
				saveFile(file, path);
			}
		}
		// 重定向
		return "redirect:/toupload";
	}

	/***
	 * 保存文件
	 * 
	 * @param file
	 * @return
	 */
	private boolean saveFile(MultipartFile file, String path) {
		// 判断文件是否为空
		if (!file.isEmpty()) {
			try {
				File filepath = new File(path);
				if (!filepath.exists())
					filepath.mkdirs();
				String encoding = getEncoding(file.getOriginalFilename());
				// 文件保存路径
				String savePath = path + new String(file.getOriginalFilename().getBytes(encoding),"UTF-8");
				
				// 转存文件
				file.transferTo(new File(savePath));
				return true;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return false;
	}

	public static String getEncoding(String str) {
		String encode = "GB2312";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
				String s = encode;
				return s; // 是的话，返回“GB2312“，以下代码同理
			}
		} catch (Exception exception) {
		}
		encode = "ISO-8859-1";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
				String s1 = encode;
				return s1;
			}
		} catch (Exception exception1) {
		}
		encode = "UTF-8";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8
				String s2 = encode;
				return s2;
			}
		} catch (Exception exception2) {
		}
		encode = "GBK";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
				String s3 = encode;
				return s3;
			}
		} catch (Exception exception3) {
		}
		return ""; // 如果都不是，说明输入的内容不属于常见的编码格式。
	}
}
